<?php

uses('sanitize');

class CategoriesController extends AppController {

	var $name = 'Categories';
	var $helpers = array('Html', 'Form', 'Ajax');
	var $components = array('Acl', 'Security'); 

	function beforeFilter()
	{
		$this->Security->requirePost('ajaxadd');
		//$this->Security->requireAuth('order');
		$this->Security->blackHoleCallback = 'invalid';
		if($this->Acl->check($this->Session->read('user'), '/categories/add', '*')){
			$this->set('showAdmin', TRUE);
		}else{
			$this->set('showAdmin', FALSE);
		}
	}

	function invalid()
	{
		header ('HTTP/x 400 Bad Request');
		echo('<h1>Upward : erreur 400</h1>');
		echo('<p>Un probleme est servenue, merci de renvoyer le formulaire une nouvelle fois.</p>');
		die;
	}

//action guest
	function index() {
		$this->Category->recursive = 0;
		$this->set('categories', $this->Category->findAll());
	}

	function view($id = null) {
		if(!$id) {
			$this->Session->setFlash('Id invalide dans les categories.');
			$this->redirect('/categories/index');
		}
		$this->set('category', $this->Category->read(null, $id));
	}

//action dealers
	//ajax - required in product add - POST
	function ajaxadd(){
		$this->set('title_error', 'Le titre de la categorie ne doit pas être vide.');
		if(!empty($this->data)){
			$san = new Sanitize();
			$this->data['Category']['title'] = $san->paranoid($this->data['Category']['title'], array(' ', '-', '+', '.'));
			$this->data['Category']['description'] = $san->sql($this->data['Category']['description']);
			
			$result = $this->Category->findByTitle($this->data['Category']['title']);
			if(!empty($result))
			{
				$this->Category->invalidate('title');
				$this->set('title_error', 'Une categorie avec ce titre existe déjà.');
			} else {
				$this->cleanUpFields();
				if($this->Category->save($this->data)) {
					//Acl
					$aco = new Aco();
					$id = $this->Category->id;
					$aco->create(0, 0, 'category-'.$id);
					$this->Acl->allow('dealers', 'category-'.$id, '*');
					$this->Acl->allow('admins', 'category-'.$id, '*');
					
					$this->Session->setFlash('La categorie a été enregistré');
					$this->set('closeajax', true);
				} else {
					$this->Session->setFlash('Merci de corriger les erreurs suivantes.');
				}
			}
		}
		$this->render('ajaxadd', 'ajax');
	}
	
	function add() {
		if($this->Acl->check($this->Session->read('user'), '/categories/add', 'read')){
			$this->set('title_error', 'Le titre de la categorie ne doit pas être vide.');
			if(empty($this->data)) {
				$this->render();
			} else {
				$san = new Sanitize();
				$this->data['Category']['title'] = $san->paranoid($this->data['Category']['title'], array(' ', '-', '+', '.'));
				$this->data['Category']['description'] = $san->sql($this->data['Category']['description']);
			
				$result = $this->Category->findByTitle($this->data['Category']['title']);
				if(!empty($result))
				{
					$this->Category->invalidate('title');
					$this->set('title_error', 'Une categorie avec ce titre existe déjà.');
				} else {
					$this->cleanUpFields();
					if($this->Category->save($this->data)) {
						//ACL
						$aco = new Aco();
						$id = $this->Category->id;
						$aco->create(0, 0, 'category-'.$id);
						$this->Acl->allow('dealers', 'category-'.$id, '*');
						$this->Acl->allow('admins', 'category-'.$id, '*');
						
						$this->Session->setFlash('La categorie a été enregistré');
						$this->redirect('/categories/index');
					} else {
						$this->Session->setFlash('Merci de corriger les erreurs suivantes.');
					}
				}
			}
		}else{
			$this->Session->setFlash('Action non autorisée');
			$this->redirect('/categories/index');
		}
	}

	function edit($id = null) {
		$this->set('title_error', 'Le titre de la categorie ne doit pas être vide.');
		if(!$id) {
			$this->Session->setFlash('Id invalide dans les categories.');
			$this->redirect('/categories/index');
		}
		if(!$this->Acl->check($this->Session->read('user'), 'category-'.$id, 'update')){
			$this->Session->setFlash('Action non autorisée');
			$this->redirect('/categories/index');
		}else{
			if(empty($this->data)) {
				$this->data = $this->Category->read(null, $id);
			} else {
				$san = new Sanitize();
				$this->data['Category']['title'] = $san->paranoid($this->data['Category']['title'], array(' ', '-', '+', '.'));
				$this->data['Category']['description'] = $san->sql($this->data['Category']['description']);
			
				$result = $this->Category->findByTitle($this->data['Category']['title']);
				if(!empty($result) && $result['Category']['id'] != $id)
				{
					$this->Category->invalidate('title');
					$this->set('title_error', 'Une categorie avec ce titre existe déjà.');
				} else {
					$this->cleanUpFields();
					if($this->Category->save($this->data)) {
						$this->Session->setFlash('La categorie a été mis à jour.');
						$this->redirect('/categories/index');
					} else {
						$this->Session->setFlash('Merci de corriger les erreurs suivantes.');
					}
				}
			}
		}
	}

	function delete($id = null) {
		if(!$id) {
			$this->Session->setFlash('Id invalide dans les categories.');
			$this->redirect('/categories/index');
		}
		if(!$this->Acl->check($this->Session->read('user'), 'category-'.$id, 'delete')){
			$this->Session->setFlash('Action non autorisée');
			$this->redirect('/categories/index');
		}else{
			if($this->Category->del($id)) {
				$aco = new Aco();
				$aco->delete('category-'.$id);
				
				$this->Session->setFlash('Cette categorie a été effacé : id '.$id.'');
				$this->redirect('/categories/index');
			}
		}
	}

}
?>